package com.tjetc.house.service;


import com.tjetc.house.domain.House;

/**
 * 处理房屋信息业务逻辑
 */
public class HouseService {
    // 这里写10为固定的长度，不能动态的改变， 不太好
//    private House[] houses = new House[10];
    private House[] houses;
    // 记录房屋编号 起始房屋的编号为1 模拟数据库中id自增的效果
    private int idNum = 1;
    // 房屋的数组 相当于扩容中的size
    private int houseNum = 1;

    public HouseService(int size) {
        houses = new House[size];
        //编号 房主 电话 地址 月租 状态(未出租/已出租)
        //House house = new House(1, "zhangsan", 132, "天津", 100, "未出租");
//        houses[0] = house;
        // 这是一个测试数据 最开始的id为1
        houses[0] = new House(idNum, "zhangsan", 132, "天津", 100, "未出租");
    }

    /**
     * 获取所有的房屋信息
     * @return 所有的房屋信息
     */
    public House[] getHouseList() {
        return houses;
    }

    /**
     * 添加房屋
     * @param house 要插入的房屋信息
     * @return 返回是否添加成功 如果返回true 代表成功， 返回false 代表失败
     */
    public boolean insertHouse(House house) {
        // 判断数组是否已满，如果满了可以做扩容处理

        // 判断当前的数组的个数是否已满
        if (houses.length == houseNum) {
            // 表示已满
            System.out.println("当前房屋信息已满，不能在继续添加");
            return false;
        }
        // 数组未满，执行添加的逻辑
        // 问题：房屋信息的id还没改呢？现在为0 应该有一个变量来自增
        // id值 跟用户是没有任何关系 他只是我们程序员用来表示唯一的的变量
        idNum++;
        house.setId(idNum);
        // 添加完数据后将房屋信息的个数添加1
        houses[houseNum] = house;
        houseNum++;
        return true;
    }

    /**
     * 根据房屋id编号删除房屋信息
     * @param deleteId 房屋编号
     * @return 返回是否删除成功 如果返回true 代表成功， 返回false 代表失败
     */
    public boolean deleteHouse(int deleteId) {
        // 删除房屋是根据id删除
        // 考虑的是？怎么根据id找到房屋信息？
        // 根据id找到房屋信息的索引
        // 遍历循环所有的房屋信息 然后进行比较
        int index = -1;
        for (int i = 0; i < houses.length; i++) {
            if (houses[i].getId() == deleteId) {
                // 如果相当就说明找到索引了
                index = i;
                break;
            }
        }
        if (index == -1) {
            return false;
        }

        // 如果找到了
        // 从找到的位置的后一个元素往前移动一个
        // 再将最后一个 设置为null
        for (int i = index; i < houseNum - 1; i++) {
            houses[i] = houses[i + 1];
        }
        houses[houseNum - 1] = null;
        // 最后不要忘记将当前数组中的数据个数-1
        houseNum--;
        return true;
    }

    /**
     * 根据id查询房屋信息
     * @param findId 房屋id
     * @return 如果查到直接返回房屋信息， 未查到返回null
     */
    public House selectHouseById(int findId) {
        for (int i = 0; i < houseNum; i++) {
            if (findId == houses[i].getId()) {
                return houses[i];
            }
        }

        return null;

    }
}
